class Solution {
public:
    int deleteAndEarn(vector<int>& nums) {

        //把每个点的点数对应到数组(转化为打家劫舍类)
        const int N=10001;      //1-N
        int n=nums.size();
        vector<int> a(N);
        for(auto x:nums) a[x]+=x;       //映射

        //打家劫舍（不能连续打两个）
         vector<int> f(N+1);
         auto g=f;
         int ret=0;
         //0 不能打，只能从1开始打
         for(int i=1;i<N;i++)
         {
            f[i]=g[i-1]+a[i];           //i处打
            g[i]=max(f[i-1],g[i-1]);    //i处不打
         }
         return max(f[N-1],g[N-1]);
    }
};